<?php

if (!function_exists('fzdc_getDistanceBuilder')) {
    function fzdc_getDistanceBuilder($lat, $lng)
    {
        return "ROUND(6378.138 * 2 * ASIN(SQRT(POW(SIN((" . fzdc_matchLatLng($lat) . " * PI() / 180 - lat * PI() / 180) / 2), 2) + COS(" . fzdc_matchLatLng($lat) . " * PI() / 180) * COS(lat * PI() / 180) * POW(SIN((" . fzdc_matchLatLng($lng) . " * PI() / 180 - lon * PI() / 180) / 2), 2))) * 1000) AS distance";
    }
}

if (!function_exists('fzdc_matchLatLng')) {
    function fzdc_matchLatLng($latlng)
    {
        $match = "/^\d{1,3}\.\d{1,30}$/";
        return preg_match($match, $latlng) ? $latlng : 0;
    }
}


if (!function_exists('fzdc_orderNo')) {

    /**
     * 生成订单号
     * @param $user_id
     * @return string
     */
    function fzdc_orderNo($user_id = 1)
    {

        $rand = $user_id < 9999 ? mt_rand(100000, 99999999) : mt_rand(100, 99999);
        $order_sn = date('Yhis') . $rand;

        $id = str_pad($user_id, (24 - strlen($order_sn)), '0', STR_PAD_BOTH);

        return $order_sn . $id;
    }
}


if (!function_exists('fzdc_get_distance')) {
    /**
     * 根据起点坐标和终点坐标测距离
     * @param  [array]   $from     [起点坐标(经纬度),例如:array(118.012951,36.810024)]
     * @param  [array]   $to     [终点坐标(经纬度)]
     * @param  [bool]    $km        是否以公里为单位 false:米 true:公里(千米)
     * @param  [int]     $decimal   精度 保留小数位数
     * @return [string]  距离数值
     */
    function fzdc_get_distance($from,$to,$km=true,$decimal=2){
        sort($from);
        sort($to);
        $EARTH_RADIUS = 6370.996; // 地球半径系数
        $distance = $EARTH_RADIUS*2*asin(sqrt(pow(sin( ($from[0]*pi()/180-$to[0]*pi()/180)/2),2)+cos($from[0]*pi()/180)*cos($to[0]*pi()/180)* pow(sin( ($from[1]*pi()/180-$to[1]*pi()/180)/2),2)))*1000;
        if($km){
            $distance = $distance / 1000;
        }
        return round($distance, $decimal);
    }
}


